/**
 * @description 实现异步请求
 */
// 实现通用配置

/**
 * @description 实现异步请求封装
 */
import { LOGIN_API, PHONE_CODE_URL, SHOW_LIST_URL } from '@/config/urls.conf'
import store from '@/store'
import axios from 'axios'
// 实现通用配置
const Axios = axios.create({
    baseURL: '/haodaifu',
    timeout: 5000
})

// 实现了请求拦截--请求前和请求后
// 定义不需要登录的请求
const noLoginUrls = [
    PHONE_CODE_URL,
    LOGIN_API 
]

Axios.interceptors.request.use(function (config) {

    // 判断是否这个请求需要进行拦截，为什么要拦截？
    // 因为有些请求需要token数据，也就是这个请求在请求之前用户一定是登陆过
    if (noLoginUrls.includes(config.url)) {
        return config
    }

    // 先获取token，然后加上token数据
    let token = store.getters['common/token']
    if (!token) {
        // 用户没有token数据，那么这个请求就不能发起，所以这里直接返回错误信息
        return Promise.reject({ code: 1, message: '用户登录的token数据不存在或者已失效' })
    

    }
    // 在请求头上带上token数据
    config.headers['X-Token'] = token
    return config

})

/**
 * 为了支持async + await 写法，还有就是减少代码量
 * @param {{url: String, method: 'GET' | 'POST' | 'DELETE' | 'PUT', data?: any, params?: any}} req 请求对象
 */
function ajax(req) {
    return new Promise(resolve => {
        Axios.request({
            url: req.url,
            method: req.method || 'GET',
            data: req.data || {},
            params: req.params || {}
        }).then(({ data }) => {
            resolve(data)
        }).catch(e => {
            resolve(e)
        })
    })
}

export default ajax